# 泛型 泛型方法 泛型类 泛型接口

# 泛型

通俗讲:泛型就是解决类、方法、接口的复用性,以及对不特定数据类型的支持兼容(类型校验)。

举例:

String getData(String data){
    return data;
}

以上例子只能传入String类型参数返回String类型的返回值,如果我们需要传入任意类型返回结果的数据类型同传入参数类型一致,这是不指定数据类型即可:

getData(data){
    return data;
}

但是这样就放弃了数据类型检查,这时泛型就该上线了。

# 泛型方法

T getData<T>(T data){
    return data;
}
main(){
    getData(21);//21
    getData('Sogrey');//Sogrey
    //getData<String>(21);//报错,数据类型校验失败
    getData<String>('Sogrey');//Sogrey
}

其中T代表任意类型数据,<>中的T为数据类型校验,指定此泛型T为什么数据类型,当然也可以不指定。

# 泛型类

其实dart中List就是个现成的泛型类。通常使用

List list = new List();
list.add(21);
list.add('Sogrey');
print(list);//[21,Sogrey]

如果加上泛型约束集合中元素的数据类型:

List list = new List<String>();
//list.add(21); //报错
list.add('Sogrey');
print(list);//[Sogrey]

实现一个简单的泛型类;

class Genericity<T>{
   List list = new List<T>();
   void setData(T data){
     list.add(data);
   }
   List getData(){
       return this.list;
   }
}
main(){
    Genericity g = new Genericity<String>();
    // g.setData(123); //报错 type 'int' is not a subtype of type 'String' of 'data'
    g.setData('Sogrey');
    print(g.getData());//[Sogrey]
}

# 泛型接口